home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / archiver / jampack4.lzh / jampack4 / depice.s next >
Text File  |  1987-04-21  |  2KB  |  111 lines

  1. ;ICE Depack routine as used in JAM packer V4.0
  2. ; Useage:    MOVE.L #$packed_data_start_address,A0
  3. ;        MOVE.L #$place_to_put_unpacked_data,A1
  4. ;        BSR    DEPACK
  5.  
  6. DEPACK:
  7.     MOVE.W    $FFFF8240.W,-(SP)
  8.     movem.l d0-a6,-(sp)
  9.     ADDQ.L    #4,A0            ;GET PAST ICE! HEADER
  10.     bsr.s    ice04
  11.     lea    -8(a0,d0.l),a5
  12.     bsr.s    ice04
  13.     move.l    d0,(sp)
  14.     movea.l a1,a4
  15.     movea.l a1,a6
  16.     adda.l    d0,a6
  17.     movea.l a6,a3
  18.     move.b    -(a5),d7
  19.     bsr    ice06
  20.     MOVE.W    (SP)+,$FFFF8240.W
  21. ice03:    movem.l (sp)+,d0-a6
  22.     rts
  23. ice04:    moveq    #3,d1
  24. ice05:    lsl.l    #8,d0
  25.     move.b    (a0)+,d0
  26.     dbra    d1,ice05
  27.     rts
  28. ice06:    bsr.s    ice0a
  29.     bcc.s    ice09
  30.     moveq    #0,d1
  31.     bsr.s    ice0a
  32.     bcc.s    ice08
  33.     lea    ice17(pc),a1
  34.     moveq    #4,d3
  35. ice07:    move.l    -(a1),d0
  36.     bsr.s    ice0c
  37.     swap    d0
  38.     cmp.w    d0,d1
  39.     dbne    d3,ice07
  40.     add.l    20(a1),d1
  41. ice08:    move.b    -(a5),-(a6)
  42.     dbra    d1,ice08
  43. ice09:    cmpa.l    a4,a6
  44.     bgt.s    ice0f
  45.     rts
  46. ice0a:    add.b    d7,d7
  47.     bne.s    ice0b
  48.     move.b    -(a5),d7
  49.     addx.b    d7,d7
  50. ice0b:    rts
  51. ice0c:    moveq    #0,d1
  52. ice0d:    add.b    d7,d7
  53.     bne.s    ice0e
  54.     move.b    -(a5),d7
  55.     MOVE.W    D7,$FFFF8240.W
  56.     addx.b    d7,d7
  57. ice0e:    addx.w    d1,d1
  58.     dbra    d0,ice0d
  59.     rts
  60. ice0f:    lea    ice18(pc),a1
  61.     moveq    #3,d2
  62. ice10:    bsr.s    ice0a
  63.     dbcc    d2,ice10
  64.     moveq    #0,d4
  65.     moveq    #0,d1
  66.     move.b    1(a1,d2.w),d0
  67.     ext.w    d0
  68.     bmi.s    ice11
  69.     bsr.s    ice0c
  70. ice11:    move.b    6(a1,d2.w),d4
  71.     add.w    d1,d4
  72.     beq.s    ice13
  73.     lea    ice19(pc),a1
  74.     moveq    #1,d2
  75. ice12:    bsr.s    ice0a
  76.     dbcc    d2,ice12
  77.     moveq    #0,d1
  78.     move.b    1(a1,d2.w),d0
  79.     ext.w    d0
  80.     bsr.s    ice0c
  81.     add.w    d2,d2
  82.     add.w    6(a1,d2.w),d1
  83.     bpl.s    ice15
  84.     sub.w    d4,d1
  85.     bra.s    ice15
  86. ice13:    moveq    #0,d1
  87.     moveq    #5,d0
  88.     moveq    #-1,d2
  89.     bsr.s    ice0a
  90.     bcc.s    ice14
  91.     moveq    #8,d0
  92.     moveq    #$3f,d2
  93. ice14:    bsr.s    ice0c
  94.     add.w    d2,d1
  95. ice15:    lea    2(a6,d4.w),a1
  96.     adda.w    d1,a1
  97.     move.b    -(a1),-(a6)
  98. ice16:    move.b    -(a1),-(a6)
  99.     dbra    d4,ice16
  100.     bra    ice06
  101.     DC.B $7f,$ff,$00,$0e,$00,$ff,$00,$07
  102.     DC.B $00,$07,$00,$02,$00,$03,$00,$01
  103.     DC.B $00,$03,$00,$01
  104. ice17:    DC.B $00,$00,$01,$0d,$00,$00,$00,$0e
  105.     DC.B $00,$00,$00,$07,$00,$00,$00,$04
  106.     DC.B $00,$00,$00,$01
  107. ice18:    DC.B $09,$01,$00,$ff,$ff,$08,$04,$02
  108.     DC.B $01,$00
  109. ice19:    DC.B $0b,$04,$07,$00,$01,$1f,$ff,$ff
  110.     DC.B $00,$1f
  111.